Conventionally, as still image compression schemes, a JPEG scheme using discrete cosine transform and a scheme using Wavelet transform are used in many cases. An encoding scheme of this type is a variable-length encoding scheme, and hence the code amount changes for each image to be encoded.
According to the JPEG scheme as an internal standardization scheme, only one quantization matrix can be defined for an image. If, therefore, this scheme is applied to a system which cannot adjust a code amount without prescan and stores codes in a limited memory, a memory overflow may occur.
In order to prevent this, conventional schemes used a method of re-reading an original upon changing the compression ratio when the actual code amount exceeds an expected code amount, a method of estimating a code amount in advance by prescan and re-setting quantization parameters to adjust the code amount, and the like.
As a code amount control scheme using prescan, for example, a scheme of storing pre-compressed data in an internal buffer memory, decompressing the data, full-compressing it upon changing the compression parameter, and outputting the resultant data to an external memory is available. In this case, the compression ratio in full-compression is higher than that in pre-compression.
Another scheme is known, in which an allowable code amount for each pixel block is obtained, and the coefficients obtained by level-shifting DCT coefficients n times are Huffman-encoded to reduce the code amount. This shift amount n is determined from the allowable code amount.
Conventionally, however, a compression buffer with a capacity larger than a target compression capacity is required as a compression buffer, and a buffer having a capacity large enough to record original image data is inevitably required to prevent an overflow in an intermediate buffer.
In addition, in the method of repeating encoding operation, since decoding and re-compression operations are performed for the overall compressed data, an increase in the speed of continuous processing cannot be expected.